package com.eps.service;

import java.math.BigDecimal;
import java.sql.Connection;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.eps.DAO.SpringHibernateDAO;
import com.eps.TO.AjustePresupuestoTO;
import com.eps.TO.ComprobantePagoTO;
import com.eps.TO.DetalleOrdenTO;
import com.eps.TO.DetalleUbicacionTO;
import com.eps.TO.MovimientoTO;
import com.eps.TO.NecesidadesSumiDetalleTO;
import com.eps.TO.NecesidadesSumiTO;
import com.eps.TO.OrdenTO;
import com.eps.TO.PapeletaTO;
import com.eps.TO.PedidoTO;
import com.eps.TO.ProveedorTO;
import com.eps.entity.Parametros;
import com.eps.entity.Pedido;
import com.eps.util.OperacionBBDDException;

@Service
public class PedidoMgr {

	@Autowired
	private SpringHibernateDAO hdao;

	public void agregarPedido(Pedido pe) {
		hdao.guardar(pe);
	}

	public String agregarPedido(String usuario,PedidoTO pedidoPrinc) throws Exception {
		return hdao.insertarPedido(usuario, pedidoPrinc);
	}

	public Parametros getParametrosID(String codigo) {
		return hdao.getParametrosID(codigo);
	}

	public BigDecimal verificarDisponibilidadSuministro(String codigo,
			boolean es_inversion, String loca, String ano, String mes,
			String id_sumi, String empresa, BigDecimal cantidad) throws Exception {
		return hdao.verificarDisponibilidadSuministro(codigo, es_inversion,
				loca, ano, mes, id_sumi, empresa,cantidad);
	}

	public boolean procesarRequerimientos(String usuario,
			List<NecesidadesSumiTO> listaRequerimiento) throws Exception {
		return hdao.procesarRequerimientos(usuario, listaRequerimiento);
	}

	public boolean procesarDetalleRequerimientos(String usuario,
			List<NecesidadesSumiDetalleTO> listaDetalle) throws Exception {
		return hdao.procesarDetalleRequerimientos(usuario, listaDetalle);
	}
	
	public boolean rechazarPedido(String cod_pedido) throws Exception {
		return hdao.rechazarPedido(cod_pedido);
	}

	public boolean isServicioTipoOrdenPedido(Integer tipo_orden)
			throws Exception {
		return hdao.isServicioTipoOrdenPedido(tipo_orden);
	}

	public boolean aceptarPedidoServicio(String codPedido) throws Exception {
		return hdao.aceptarPedidoServicio(codPedido);
	}

	public boolean aceptarPedido(PedidoTO pedido) throws Exception {
		return hdao.aceptarPedido(pedido);
	}

	public String insertarOrden(String usuario,OrdenTO orden)
			throws Exception {
		return hdao.insertarOrden(usuario, orden);
	}

	public BigDecimal getMontoImpuesto(Integer tipoPlantilla,
			BigDecimal subTotal) throws Exception {
		return hdao.getMontoImpuesto(tipoPlantilla, subTotal);
	}
	
	public String insertarSalidaPedido(String usuario,MovimientoTO movimiento) throws Exception {
		return hdao.insertarSalidaPedido(usuario,movimiento);
	}
	public String insertarSalidaPedidoInventario(String usuario,MovimientoTO movimiento,List<DetalleOrdenTO> lista) throws Exception {
		return hdao.insertarSalidaPedidoInventario(usuario,movimiento, lista);
	}
	public String insertarIngresoPedido(String usuario,MovimientoTO movimiento, List<DetalleOrdenTO> detalles) throws Exception {
		return hdao.insertarIngresoPedido(usuario,movimiento, detalles);
	}
	
	
	 public DataSource devuelveConexion() throws Exception{
		 return hdao.devuelveConexion();
	 }
	 public void cierraConexion(Connection con) throws Exception{
		 hdao.cierraConexion(con);
	 }
	 public String insertarUbicacionIngreso(String usuario, List<DetalleUbicacionTO> lista) throws Exception{
		 return hdao.insertarUbicacionIngreso(usuario, lista);
	 }
	 public String insertarComprobante(String usuario, ComprobantePagoTO comp) throws Exception {
		 return hdao.insertarComprobante(usuario, comp);
	}

	public boolean actualizarClave(String usuario,String clave_antigua ,String claveNueva)
			throws Exception {
		return hdao.actualizarClave(usuario,clave_antigua, claveNueva);
	}
	public String registrarProveedor(ProveedorTO pro) throws Exception{
		return hdao.registrarProveedor(pro);
	}

	public boolean anularOrden(String nroOrden) throws Exception {
		return hdao.anularOrden(nroOrden);
	}
	public String modificarProveedor(ProveedorTO pro)  throws Exception{
		 return hdao.modificarProveedor(pro);
	 }

	public BigDecimal getCantidadStock(String idZona, String idEmpresa,
			String idSuministro) throws Exception {
		return hdao.getCantidadStock(idZona, idEmpresa, idSuministro);
	}

	public BigDecimal getCantidadStockInversion(String idZona,
			String idEmpresa, String idSuministro, String idProyecto)
			throws Exception {
		return hdao.getCantidadStockInversion(idZona, idEmpresa, idSuministro,
				idProyecto);
	}

	public void verificaOperAjustePPto() throws Exception {
		hdao.verificaOperAjustePPto();
	}

	public List<AjustePresupuestoTO> getListaAjustePptoUsuario(int estado,
			String zona, int limite, String anio,String mes) throws Exception {
		return hdao.getListaAjustePptoUsuario(estado, zona, limite,anio,mes);
	}
	
	public void insertarPapeleta(PapeletaTO papeleta) throws OperacionBBDDException{
		hdao.insertarPapeleta(papeleta);
	}

	public void anularPapeleta(String dni,String  cod_papeleta,String tipo_papeleta) throws OperacionBBDDException{
		hdao.anularPapeleta(dni,cod_papeleta,tipo_papeleta);
	}
	

}
